import { message } from 'antd';

interface ErrorWithCode extends Error {
  code?: string;
  response?: {
    status: number;
    data: any;
  };
}

export class AppError extends Error {
  code: string;
  constructor(message: string, code: string) {
    super(message);
    this.code = code;
  }
}

export const errorHandler = (error: ErrorWithCode) => {
  if (error instanceof AppError) {
    message.error(error.message);
    return;
  }

  if (error.response) {
    switch (error.response.status) {
      case 400:
        message.error('请求参数错误');
        break;
      case 401:
        message.error('未授权，请重新登录');
        break;
      case 403:
        message.error('无权访问');
        break;
      case 404:
        message.error('请求的资源不存在');
        break;
      case 500:
        message.error('服务器错误');
        break;
      default:
        message.error('未知错误');
    }
  } else if (error.code === 'ECONNABORTED') {
    message.error('请求超时，请重试');
  } else {
    message.error('网络错误，请检查网络连接');
  }
};